package Activemq;


import Redis.Rdo;

/**
 * C2组件
 */
public abstract class C2Component extends Thread {
    public String id;
    /**
     * 消息服务器主机名
     */
    protected String host;

    /**
     * 消息服务器端口
     */
    protected int port;

    /**
     * 用户名
     */
    protected String user;

    /**
     * 密码
     */
    protected String pwd;


    /**
     * 当前构件队列名称
     */
    public  String queue = "Test";

    /**
     * 是否继续工作
     */
    Boolean toWork = false;

    /**
     * 消息发送器
     */
    Sender sender = null;

    /**
     * 消息接收器
     */
    Reciever reciever = null;

    //增加对redis操控类
    private String rip;
    private int rport;
    Rdo rdo;

    /**
     * 构造函数
     * @param host 主机名/IP
     * @param port 端口
     * @param user 用户名
     * @param pwd 密码
     */
    public C2Component(String host, int port, String user, String pwd,String queue,String id) {
        this.host = host;
        this.port = port;
        this.user = user;
        this.pwd = pwd;
        this.queue = queue;
        this.id = id;
    }
    public C2Component(String host, int port, String user, String pwd,String id,String rip,int rport) {
        this.host = host;
        this.port = port;
        this.user = user;
        this.pwd = pwd;
        this.id =id;
        this.rip=rip;
        this.rport=rport;
    }
    /**
     * 开始工作
     */
    public void StartWork() {

        // 启动一个发送器
        sender = new Sender(host, port, user, pwd);
        sender.startWork();

        // 启动一个接收器
        reciever = new Reciever(host, port, user, pwd, queue);
        reciever.startListern();

        //启动redis连接
        rdo=new Rdo();
        rdo.connect(rip,rport);
        System.out.println("activemq连接成功.........");
        // 开启工作线程
        toWork = true;
        this.start();
    }

    /**
     * 停止工作，释放连接
     */
    public void StopWork() {
        if (reciever != null) {
            reciever.stopListern();
            reciever = null;
        }

        if(sender != null){
            sender.StopWork();
            sender = null;
        }

        toWork = false;

    }

    /**
     * 进行计算,并取结果
     * @param msg 字符串消息
     * @return 加后的值
     */
   // abstract String  getResult(String msg) ;
    //逻辑处理的状态
//    @Override
//    public void run() {
//        while (toWork) {
//            if (null != reciever) {
//
//                // 接收器对了中是否消息系
//                if (reciever.msgList.size() > 0) {
//
//                    // 取出一个消息
//
//
//
//                    // 将计算结果返回给发送者， （谁发来的数据，就返回给谁）
//
//                    }
//                }
//            }
//
//            // 休眠0.1秒
//            try {
//                sleep(100);
//            } catch (Exception e) {
//                // TODO: handle exception
//                e.printStackTrace();
//            }
//        }

    @Override
    public abstract void run();

}




